package com.company.nuwa.redis.support.lock;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * <p>redis locker</p >
 *
 * @author Nikola Tesla
 * @version 1.0
 * @date 2021/1/12 14:04
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RedisLock {

    /**
     * 锁key
     * <p>
     * 支持Spring EL表达式
     *
     * @return
     */
    String key() default "";

    /**
     * 持有时间，默认为 -1，表示一直持有
     * <p>
     * 若时间不为 -1，一但时间到期，则会自动释放锁。
     * <p>
     * 若时间为 -1，则表示一直持有，直到整个流程执行完毕，才会释放。
     * <p>
     * 单位毫秒
     *
     * @return
     */
    int timeout() default 3000;

    /**
     * 持有时间单位，默认毫秒
     *
     * @return
     */
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;

}
